/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.ejbs.stateless.interfaces;

import br.com.saber.certificacao.modelos.Certificacao;
import br.com.saber.certificacao.modelos.Questao;
import br.com.saber.certificacao.modelos.Resposta;
import br.com.saber.certificacao.modelos.Usuario;
import br.com.saber.certificacao.modelos.Versao;
import java.util.List;
import java.util.Set;
import javax.ejb.Local;

/**
 *
 * @author gbvbahia
 */
@Local
public interface QuestaoBeanLocal {

    /**
     * Salva/Atuaiza a questão no banco de dados
     * Passe uma lista com as versões que devem manter relacionamento
     * com a questão passada.
     * As versões que possuem relacionamento com a questão passada também devem
     * estar dentro da lista, se não estiverem o relacionamento será desfeito.
     * @param questao
     * @param versoes
     */
    void salvarQuestao(Questao questao, List<Versao> versoes);

    /**
     * Retorna todas as questões que o professor ou coordenador tem acesso.
     * @param usuario Professor ou Coordenador.
     * @param carregarVersoes true caso deseja receber a lista VersaoQuestao carregada.
     * @param carregarProfessor true caso deseja receber a o usuário responsável por esta versão.
     * @return Set de questões. Set garante não repetição de Questões.
     */
    Set<Questao> buscarQuestoesPorUsuario(Usuario usuario, boolean carregarVersoes, boolean carregarProfessor);

    /**
     * Busca a resposta que contenha o ID informado
     * retorna null se não encontrar.
     * @param idResposta
     * @return a resposta com o Id informado
     */
    Resposta buscarRespostaPorId(Long idResposta);
    
    /**
     * Altera o status da questão para bloqueado se a mesma estiver liberada
     * ou para liberada se a mesma estiver bloqueada.<br>
     * Procura a questão passada no banco de dados peli ID, se não encontrar 
     * uma questão com mesmo ID, não realiza nenhuma tarefa e retorna false.
     * @param questao
     * @return true se alterar o estatus con sucesso e false se não alterar.
     */
    boolean alterarStatusQuestao(Questao questao);
}
